#ifndef __mscoop_pkt_h__
#define __mscoop_pkt_h__

#include <packet.h>
#include <vector>
using namespace std;

#define HDR_MSCOOP_PKT(p) hdr_mscoop_pkt::access(p)


enum MsgType {
    SUMARIO,
    SA,
    CONSULTA,
    RESPOSTA,
    DADO,
    MULTISUM
};

struct hdr_mscoop_pkt {
    nsaddr_t  pkt_src_; // Node which originated this packet
    nsaddr_t  pkt_dest_;
    u_int16_t pkt_len_; // Packet length (in bytes)
    u_int8_t  pkt_seq_num_; // Packet sequence number
    u_int8_t  pkt_temp_; // Valor coletado
    u_int8_t  pkt_send_time_;
    u_int8_t  pkt_msg_type_;
    vector<float>  pkt_dados_;
    u_int16_t pkt_size_;
    

    inline nsaddr_t  & pkt_src() {return pkt_src_;}
    inline nsaddr_t  & pkt_dest() {return pkt_dest_;}
    inline u_int16_t & pkt_len() {return pkt_len_;}
    inline u_int8_t  & pkt_seq_num() {return pkt_seq_num_;}
    inline u_int8_t  & pkt_temperatura() {return pkt_temp_;}
    inline u_int8_t  & pkt_send_time() {return pkt_send_time_;}
    inline u_int8_t  & pkt_msg_type() {return pkt_msg_type_;}  
    inline vector<float> & pkt_dados() {return pkt_dados_;}
    inline u_int16_t & pkt_size() {return pkt_size_;}
    static int offset_;

    inline static int& offset() {
        return offset_;
    }

    inline static hdr_mscoop_pkt * access(const Packet * p) {
        return (hdr_mscoop_pkt*) p->access(offset_);
    }
};


#endif 
